About 1555 letters

About 8 minutes

#Python Program Not Printing Output in nohup

nohup is used to prevent a program from terminating when the terminal hangs up. It’s particularly useful for running long-running tasks.

nohup command &

When you run a program with nohup, standard output and standard error are redirected to nohup.out by default. You can use the tail -f nohup.out command to monitor the program output in real time.

However, if you use nohup to run a Python script, you may notice that nohup.out shows no output for a long time.

nohup script.py &

This happens because when Python runs in interactive mode, stdout and stderr are line-buffered, but in non-interactive mode, stdout uses block buffering.

  • Block buffering: Output is written only when the buffer is full
  • Line buffering: Output is written when the buffer is full or a newline character is encountered

As a result, unless the buffer is flushed (i.e., filled and written), you won’t see the standard output in nohup.out.

#Solutions

#Disable buffering

Run the Python script with the -u flag to disable output buffering. Note that this may reduce performance.

nohup python -u script.py &

#Manually set line buffering

You can use the sys.stdout.reconfigure method to manually enable line buffering for standard output:

import sys sys.stdout.reconfigure(line_buffering=True)

Created in 6/2/2025

Updated in 6/2/2025